package org.stvd.service.admin;

import java.util.List;
import java.util.Map;

import org.stvd.common.utils.ServiceResult;
import org.stvd.core.dto.QueryResult;
import org.stvd.entities.admin.Dictionary;
import org.stvd.entities.admin.DictionaryType;
import org.stvd.service.base.BaseService;

/**
 * @Title: DictionaryService
 * @Description: 系统字典Service接口
 * @author houzx
 * @date 2020年2月7日
 */
public interface DictionaryService extends BaseService<Dictionary> {

    /**
     * @Description: 新增字典类别
     * @param dictionaryType
     * @return
     */
    public ServiceResult<Object> insertDictionaryType(DictionaryType dictionaryType);
    
    /**
     * @Description: 更新字典类别
     * @param dictionaryType
     * @return
     */
    public ServiceResult<Object> updateDictionaryType(DictionaryType dictionaryType);

    /**
     * @Description: 删除字典类别
     * @param typeId 类别ID
     * @return
     */
    public ServiceResult<Object> deleteDictionaryType(String typeId);
    
    /**
     * @Description: 新增字典数据
     * @param dictionary
     * @return
     */
    public ServiceResult<Object> insertDictionary(Dictionary dictionary);
    
    /**
     * @Description: 更新字典数据
     * @param dictionary
     * @return
     */
    public ServiceResult<Object> updateDictionary(Dictionary dictionary);
    
    /**
     * @Description: 删除字典数据
     * @param typeId 类别ID
     * @param dicId 数据ID
     * @return
     */
    public ServiceResult<Object> deleteDictionary(String typeId, String dicId);
    
    /**
     * @Description: 根据条件查询字典类型集合
     * @param start
     * @param limit
     * @param id 类型ID
     * @param name 类型名称
     * @return
     */
    public QueryResult<DictionaryType> queryDictionaryTypeResult(int start, int limit, String id, String name);
    
	/**
	 * 获取所有字典类型列表
	 * @return
	 */
	public List<DictionaryType> findAllDictionaryType();
	
	/**
	 * 根据类型获取字典数据列表
	 * @param type 字典类型
	 * @return
	 */
	public List<Dictionary> getQueryByType(String type);
	
	/**
	 * 根据类型获取字典数据列表（多层级关系）
	 * @param type 字典类型
	 * @return
	 */
	public List<Map<String, Object>> listAllDicsByType(String type);
	
	/**
	 * 根据类型获取所有有子集字典的字典数据
	 * @param type 字典类型
	 * @return
	 */
	public List<Dictionary> findAllUpperDicsByType(String type);

	/**
	 * @Description: 根据类型及ID获取数据字典信息
	 * @param type 字典类别
	 * @param id 字典ID
	 * @return
	 */
	public Dictionary findByTypeID(String type, String id);

	/**
     * @Description:根据类别ID获取字典类别
     * @param typeId 类别ID
     * @return
     */
    public DictionaryType findByTypeID(String typeId);

}
